﻿using System;
using System.Collections.Generic;
using ClickLand.CorporacionPlaza.Presentacion.CorporacionPlazaWS;

namespace ClickLand.CorporacionPlaza.Presentacion.Controladores
{
    /// <summary> Clase que hace de controlador para el modulo de contrato </summary>
    public class ControladorAdministracionContrato
    {
        /// <summary> Metodo que realiza la llamada al servicio que agrega los datos de un contrato </summary>
        /// <param name="contrato">Datos del contrato a almacenar</param>
        /// <returns>true si almaceno false sino</returns>
        public bool AgregarContrato(ContratoDto contrato)
        {
            try
            {
                var servicio = new CorporacionPlazaWS.CorporacionPlazaWS();
                return servicio.AgregarContrato(contrato);

            }
            catch (Exception)
            {
                return false;
            }
        }


        /// <summary> Metodo que realiza la llamada al servicio que consulta los contratos dados unos parametros </summary>
        /// <param name="contrato">Lista de contratos</param>
        /// <returns>Lista de contratos que coinciden con la busqueda</returns>
        public List<ContratoDto> BuscarContrato(ContratoDto contrato)
        {
            var servicio = new CorporacionPlazaWS.CorporacionPlazaWS();
            return new List<ContratoDto>(servicio.ConsultarContrato(contrato));
        }


        /// <summary> Metodo que agrega los datos de una venta </summary>
        /// <param name="venta"></param>
        public bool AgregarVenta(VentaDto venta)
        {
            try
            {
                var servicio = new CorporacionPlazaWS.CorporacionPlazaWS();
                servicio.AgregarVenta(venta);
                return true;

            }
            catch (Exception)
            {
                return false;
            }
        }


        /// <summary> Metodo que realiza la invocacion del servicio para consultar la lista de ventas dados los parametros indicados </summary>
        /// <param name="contrato">Datos del contrato</param>
        /// <param name="fechaInicio">Fecha de inicio de la consulta</param>
        /// <param name="fechaFin">Fecha fin de la consulta</param>
        /// <returns>Lista de ventas</returns>
        public List<VentaDto> BuscarVentas(ContratoDto contrato, DateTime fechaInicio, DateTime fechaFin)
        {
            var servicio = new CorporacionPlazaWS.CorporacionPlazaWS();
            var retorno = new List<VentaDto>(servicio.ConsultarVentasContrato(contrato,fechaInicio,fechaFin));
            return retorno;

        }


        /// <summary> Metodo que realiza la invocacion del servicio que realiza la cosulta de las polizas </summary>
        /// <param name="contrato">parametros para la consulta</param>
        /// <returns>Lista de polizas</returns>
        public List<PolizaDto> BuscarPolizas(ContratoDto contrato)
        {
            var servicio = new CorporacionPlazaWS.CorporacionPlazaWS();
            var retorno = new List<PolizaDto>(servicio.ConsultarListaPoliza(contrato));
            return retorno;
        }


        /// <summary> Metodo que invoca el servicio que consulta la lista de proyeccion de un contrato </summary>
        /// <param name="contrato">Contrato dueno de la proyeccion</param>
        /// <returns>Lista de proyeccion</returns>
        public List<ProyeccionDto> ConsultarProyeccion(ContratoDto contrato)
        {
            var servicio = new CorporacionPlazaWS.CorporacionPlazaWS();
            var retorno = new List<ProyeccionDto>(servicio.ConsultarProyeccion(contrato));
            return retorno;
        }


        /// <summary> Metodo que invoca al servicio que realiza la insercion de la proyeccion </summary>
        /// <param name="listaNueva"></param>
        /// <param name="listaVieja"></param>
        public void AgregarProyeccion(List<ProyeccionDto> listaNueva, List<ProyeccionDto> listaVieja)
        {
            var servicio = new CorporacionPlazaWS.CorporacionPlazaWS();
            var retorno = (servicio.AgregarEditarProyeccion(listaNueva.ToArray(),listaVieja.ToArray()));
        }



        /// <summary> Metodo que obtiene la lista de canon de un contrato </summary>
        /// <param name="contrato"></param>
        /// <param name="fecha"></param>
        /// <returns></returns>
        public List<ContratoPensionDto> ConsultarCanon(ContratoDto contrato, DateTime fecha)
        {
            var servicio = new CorporacionPlazaWS.CorporacionPlazaWS();
            var retorno = new List<ContratoPensionDto>(servicio.ConsultarCanon(contrato, fecha));
            return retorno;
        }
    }
}
